// 导入commentModel对象
const commentModel = require('../models/commentModel');
const Jwt = require('../common/jwt');
// 导入uuid功能（生成随机字符串）
const { v4: uuidv4 } = require('uuid');

// 评论类
class Comment {
    // 1. 发表评论
    async addComment(req,res){
        let token = req.body.token || req.headers.token;
        let jwt = new Jwt(token);
        // 判断token是否在有效期
        let result = jwt.verifyToken();
        if(result.data){
            let comment_id = uuidv4();//随机字符串
            let article_id = req.body.article_id;//给谁写的评论
            let to_user_id = req.body.to_user_id;//给谁写的评论
            let from_user_id = result.data;// 谁写的评论 user_id
            let comment_content = req.body.comment_content;//评论的内容
            await commentModel.addComment(comment_id, to_user_id, from_user_id, comment_content,article_id)
            .then(
                content=>{
                    res.send(content);
                }
            )
            .catch(
                error=>{
                    res.send(error);
                }
            )
        }
        else {
            res.send({
                code: -1,
                msg: '请先登录账号'
            })
        }
    }
    // 2. 删除评论
    async removeComment(req,res){
        let token = req.body.token || req.headers.token;
        let jwt = new Jwt(token);
        // 判断token是否在有效期
        let result = jwt.verifyToken();
        if(result.data){
            let comment_id = req.body.comment_id;//评论的id
            let from_user_id = result.data;// 发布评论的用户
            await commentModel.removeComment(comment_id, from_user_id)
            .then(
                content=>{
                    res.send(content);
                }
            )
            .catch(
                error=>{
                    res.send(error);
                }
            )
        }
        else {
            res.send({
                code: -1,
                msg: '请先登录账号。'
            })
        }
    }
    // 3. 回复评论
    async addReply(req,res){
        let token = req.body.token || req.headers.token;
        let jwt = new Jwt(token);
        // 判断token是否在有效期
        let result = jwt.verifyToken();
        if(result.data){
            let user_id = result.data;// 写回复的人
            let comment_id = req.body.comment_id;
            // let id = req.body.id;
            let reply_content = req.body.reply_content;//回复的内容
            await commentModel.addReply(comment_id,reply_content,user_id)
            .then(
                content=>{
                    res.send(content);
                }
            )
            .catch(
                error=>{
                    res.send(error);
                }
            )
        }
        else {
            res.send({
                code: -1,
                msg: '请先登录账号'
            })
        }
    }
    // 4. 评论列表
    async getComment(req,res){
        let token = req.query.token || req.headers.token;
        let article_id = req.query.article_id;
        let jwt = new Jwt(token);
        // 判断token是否在有效期
        let result = jwt.verifyToken();
        if(result.data){
            await commentModel.getComment(article_id)
            .then(
                content=>{
                    res.send(content);
                }
            )
            .catch(
                error=>{
                    res.send(error);
                }
            )
        } 
        else {
            res.send({
                code: -1,
                msg: '请先登录账号。'
            })
        }
    }
}

// 暴露评论类的实例
module.exports = new Comment();
